package com.zhanglijie.base.volatileLearn;

/**
 * @author zhanglijie
 * @version 1.0
 * @since 1.1.0 2022/5/19 0019 0:05
 * 美团面试题
 */
public class MeiTuanExam {
    private   static int x=0;
    private   static int y = 0;
    private static int a=0,b=0;
    public static void main(String[] args) throws InterruptedException {
        int i = 0;
       for(;;){
          i++;
          x = 0;y = 0;a = 0;b = 0;
          Thread t1 = new Thread(() -> {
               x = a;
               b = 3;
               // a = 1;
               // x= b;
          });
           Thread t2 = new Thread(() -> {
               y = b;
               a = 3;
               // b = 1;
               // y = a;
           });
           t1.start();
           t2.start();
           t1.join();
           t2.join();
           /**
            * 出现的情况：如果t1先跑完 t2再跑          x=0,y=1
            *           如果t2先跑完 t1再跑          x=1,y=0
            *           如果t1和t2跑的过程中交替的跑   x=1,y=1
            *           但是对于  x=0,y=0的结果好像怎么排列组合t1 t2跑的顺序也无法得到，但是x=0,y=0这个真的会出现(第 25518次  x=0 && y=0)
            *           这个就是指令重排了
            *             t1: 指令重排为:  x=b;
            *                            a=1;
            *             t2  指令重排为： y=a;
            *                            b=1
            *
            */
           System.out.println("第 "+i +" 次 x= "+x+" y= "+y);
           if(x == 3 && y == 3){
               System.out.println("第 "+i+"次  x=3 && y=3");
               break;
           }
       }
    }
}
